package global

// AppConfig 总全局出口结构体
type config struct {
	Sql  Sql  `json:"sql" yaml:"sql"`
	Jwt  Jwt  `json:"jwt" yaml:"jwt"`
	Log  Log  `json:"log" yaml:"log"`
	Md5  Md5  `json:"md5" yaml:"md5"`
	Base Base `json:"base" yaml:"base"`
}

// Base 应用基本配置
type Base struct {
	//环境
	Env string `mapstructure:"env" json:"env" yaml:"env"`
	//端口
	Port string `mapstructure:"port" json:"port" yaml:"port"`
	//项目名
	AppName string `mapstructure:"app_name" json:"app_name" yaml:"app_name"`
	//应用域名
	AppUrl string `mapstructure:"app_url" json:"app_url" yaml:"app_url"`
}

// Sql Database 数据库
type Sql struct {
	Driver              string `mapstructure:"driver" json:"driver" yaml:"driver"`
	Host                string `mapstructure:"host" json:"host" yaml:"host"`
	Port                int    `mapstructure:"port" json:"port" yaml:"port"`
	Database            string `mapstructure:"database" json:"database" yaml:"database"`
	UserName            string `mapstructure:"username" json:"username" yaml:"username"`
	Password            string `mapstructure:"password" json:"password" yaml:"password"`
	Charset             string `mapstructure:"charset" json:"charset" yaml:"charset"`
	MaxIdleConns        int    `mapstructure:"max_idle_conns" json:"max_idle_conns" yaml:"max_idle_conns"`
	MaxOpenConns        int    `mapstructure:"max_open_conns" json:"max_open_conns" yaml:"max_open_conns"`
	LogMode             string `mapstructure:"log_mode" json:"log_mode" yaml:"log_mode"`
	EnableFileLogWriter bool   `mapstructure:"enable_file_log_writer" json:"enable_file_log_writer" yaml:"enable_file_log_writer"`
	LogFilename         string `mapstructure:"log_filename" json:"log_filename" yaml:"log_filename"`
}

// Jwt  登录校验配置信息结构体
type Jwt struct {
	Secret string `mapstructure:"secret" json:"secret" yaml:"secret"`
	JwtT   int64  `mapstructure:"jwt_t" json:"jwt_t" yaml:"jwt_t"`    // token 有效期（秒）
	Issuer string `mapstructure:"issuer" json:"issuer" yaml:"issuer"` //签发人
}

// Log 日志配置结构体
type Log struct {
	//等级
	Level string `mapstructure:"level" json:"level" yaml:"level"`
	//文件
	RootDir string `mapstructure:"root_dir" json:"root_dir" yaml:"root_dir"`
	//文件名字
	Filename string `mapstructure:"filename" json:"filename" yaml:"filename"`
	//写入格式 可选json
	Format string `mapstructure:"format" json:"format" yaml:"format"`
	//显示调用行
	ShowLine bool `mapstructure:"show_line" json:"show_line" yaml:"show_line"`
	//只保留最近多少个日志文件，用于控制程序总日志的大小
	MaxBackups int `mapstructure:"max_backups" json:"max_backups" yaml:"max_backups"`
	//每个日志文件长度的最大大小，默认100M
	MaxSize int `mapstructure:"max_size" json:"max_size" yaml:"max_size"` // MB
	//日志保留的最大天数
	MaxAge int `mapstructure:"max_age" json:"max_age" yaml:"max_age"` // day
	// 是否压缩日志文件，压缩方法gzip
	Compress bool `mapstructure:"compress" json:"compress" yaml:"compress"`
}

// Md5 key
type Md5 struct {
	Key string `mapstructure:"key" json:"key" yaml:"key"`
}
